package sword.offer;

/**
 * 输入一个递增排序的数组和一个数字s，在数组中查找两个数，使得它们的和正好是s。如果有多对数字的和等于s，则输出任意一对即可。
 * @author 胡宇轩
 * @Email: yuxuan.hu01@bianlifeng.com
 */
public class FiftySeven {
    /**
     * 注意这是一个递增的数字，即从左往右，从小到大；从右往走，从大到小。<br/>
     * 这一题的思路跟剑指offer中的 二维数组中查找 这题一致。<br/>
     * 双端指针，指针1指向数组的第一个元素  指针2指向数组的第二个元素<br/>
     * 如果指针1和指针2指向的元素之和 比 target 大 那么 指针2往前移动 相反，指针1往后移动
     * */
    class Solution {
        public int[] twoSum(int[] nums, int target) {
            int first = 0;
            int last = nums.length - 1;
            while(first < last){
                if(nums[first] + nums[last] == target){
                    break;
                }
                if(nums[first] + nums[last] > target){
                    last--;
                }
                if(nums[first] + nums[last] < target){
                    first++;
                }
            }
            return new int[]{nums[first], nums[last]};
        }
    }
}
